
package demo10;


// 实现线程池

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

class MyThreadPool{
    // 首先创建一个阻塞队列用来存储任务
    private BlockingQueue<Runnable> queue=new ArrayBlockingQueue<>(1000);

    public void submit(Runnable r){
        queue.add(r);
    }

    // 这里的方法是构建n个线程，运行上面的任务
    MyThreadPool(int n){
        for(int i=0;i<n;i++){
            // 由于lambda表达式中变量捕获应该是final类型的变量
            int id=i;
            Thread t=new Thread(()->{
                System.out.println(id);
            });
            t.start();
        }
    }
}
public class Test29 {
    public static void main(String[] args) {
        // 这里创建的是一个核心线程数为10的线程池
        MyThreadPool myThreadPool=new MyThreadPool(10);

        for(int i=0;i<1000;i++){
            int id=i;
            myThreadPool.submit(new Runnable() {

                @Override
                public void run() {
                    System.out.println("任务：" + id);
                }
            });
        }
    }
}
